package com.molichuxing.gateway.api.services;


import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.result.ResponseResult;
import com.molichuxing.gateway.bff.dealer.entity.request.create.DealerEsignCreateVo;
import com.molichuxing.gateway.bff.financial.entity.request.create.EsignAccountCreateVo;
import com.molichuxing.gateway.bff.financial.entity.request.create.EsignCompanyCreateVo;
import com.molichuxing.gateway.bff.financial.entity.request.modify.InvoiceInfoModifyStatusVo;
import com.molichuxing.gateway.bff.financial.entity.request.modify.OfflineAuditModifyVo;
import com.molichuxing.gateway.bff.financial.entity.response.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 财务相关接口
 *
 * @author zhaopenghui
 * @date 2019年8月27日
 */
public interface FinancialApiService {

    /**
     * 收款台账
     *
     * @param map
     * @param pageNum
     * @param pageSize
     * @return
     */
    public ResponseResult<Paged<ReceiptVo>> getReceiptPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

	/**
	 * 收款台账导出
	 * 
	 * @param selectParams
	 */
	public void receiptStandingBookDownload(HttpServletRequest request, HttpServletResponse response,
			Map<String, Object> selectParams);

	/**
	 * 收款台账导出查询
	 * 
	 * @param selectParams
	 */
	public ResponseResult<Boolean> receiptStandingBookDownloadQuery(HttpServletRequest request,
			HttpServletResponse response, Map<String, Object> selectParams);

    /**
     * 还款审核列表
     *
     * @param map
     * @param pageNum
     * @param pageSize
     * @return
     */
    public ResponseResult<Paged<OfflineInfoVo>> getOfflinePage(Map<String, Object> map, Integer pageNum, Integer pageSize);

    /**
     * 还款审核
     *
     * @param offlineAuditModifyVo
     * @return
     */
    public ResponseResult<Boolean> modifyAuditStatus(OfflineAuditModifyVo offlineAuditModifyVo);

    /**
     * 保证金台账
     *
     * @param map
     * @param pageNum
     * @param pageSize
     * @return
     */
    public ResponseResult<Paged<ReceiptVo>> getDepositReceiptPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

    /**
     * 经销商台账
     *
     * @param map
     * @param pageNum
     * @param pageSize
     * @return
     */
    public ResponseResult<Paged<ReceiptVo>> getDealerReceiptPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

    /**
     * 合同列表
     *
     * @param map
     * @param pageNum
     * @param pageSize
     * @return
     */
    public ResponseResult<Paged<ContractVo>> getMainContractPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

    /**
     * 子合同列表
     *
     * @param mainOrderCode
     * @return
     */
    public ResponseResult<List<ContractVo>> getSubContractList(Long mainOrderCode);

    /**
     * 发票管理列表
     *
     * @param map
     * @param pageNum
     * @param pageSize
     * @return
     */
    public ResponseResult<Paged<InvoiceInfoVo>> getInvoiceInfoPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

    /**
     * 开票
     *
     * @param invoiceInfoModifyStatusVo
     * @return
     */
    public ResponseResult<Boolean> modifyInvoiceStatus(InvoiceInfoModifyStatusVo invoiceInfoModifyStatusVo);


    /**
     * 合同日志列表
     *
     * @param map
     * @param pageNum
     * @param pageSize
     * @return
     */
    public ResponseResult<Paged<ContractLogVo>> getMContractLogPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

    /**
     * 生成经销商印章
     *
     * @param list
     * @return
     */
    public ResponseResult<Boolean> createDealerEsign(List<DealerEsignCreateVo> list);

    /**
     * 创建分子公司印章
     *
     * @param list
     * @return
     */
    public ResponseResult<Boolean> createCompanyEsign(List<EsignCompanyCreateVo> list);

    /**
     * 创建用户印章
     *
     * @param list
     * @return
     */
    public ResponseResult<Boolean> createAccountEsign(List<EsignAccountCreateVo> list);


    /**
     * 初始化发票数据
     *
     * @return
     */
    public ResponseResult<Boolean> initInvoiceData();

    /**
     * 判断企业订单合同编号是否存在
     *
     * @param contractNo 合同编号
     * @return
     */
    public ResponseResult<Boolean> getContractEnterpriseIsExist(String contractNo);
}
